#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <functional>

using namespace std;

typedef int Paquete;
typedef int Camion;

void leerStdin();
void repartir(vector<Paquete> &paquetes, vector<Camion> &camiones, int pesoMaxCamion);

int main(int argc, char *argv[]) {
	leerStdin();
	return 0;
}

void leerStdin() {
	bool pesoMaxCamionFlag(true);

	while(1) {
		/* Leer instancia */

		int pesoMaxCamion(0), cantPaquetes(0), pesoPaquete(0);

		if(!(cin >> pesoMaxCamion)) {
			break;
		}

		cin >> cantPaquetes;

		vector<Paquete> paquetes;
		vector<Camion> camiones;
		
		if(cantPaquetes > 0){
			for(int i = 0; i < cantPaquetes; i++) {
				cin >> pesoPaquete;
				paquetes.push_back(pesoPaquete);
			}

			/* Resolver */
			repartir(paquetes, camiones, pesoMaxCamion);
		}else{
			cout << "0" << endl;
		}
	}
}

void repartir(vector<Paquete> &paquetes, vector<Camion> &camiones, int pesoMaxCamion) {
	
	camiones.push_back(0);
	make_heap(camiones.begin(), camiones.end(), greater<Camion>());
	Camion actual;

	for(int i=0; i < paquetes.size() ; i++) {
		if(pesoMaxCamion >= camiones.front() + paquetes[i]) {
			camiones.front() += paquetes[i];
			actual = camiones.front();
			pop_heap(camiones.begin(), camiones.end(), greater<Camion>());
			camiones.pop_back();
		} else {
			actual = paquetes[i];
		}
		camiones.push_back(actual);
		push_heap(camiones.begin(), camiones.end(), greater<Camion>());
	}
	
	cout << camiones.size() << " ";
	for(int i = 0; i < camiones.size(); i++)
	 	cout << camiones[i] << " ";
	cout << endl;
}

